/*
 * GestorDeConsultasDeTexto.h
 *
 *  Created on: 11/11/2013
 *      Author: Miguel
 */

#ifndef GESTORDECONSULTASDETEXTO_H_
#define GESTORDECONSULTASDETEXTO_H_

#include "ListaInvertida.h"
#include "Vocabulario.h"
#include "../Types.h"
#include "HandlerDeTexto.h"
#include "Lista.h"
#include "../secuential/SecuentialFile.h"

class GestorDeDocumentos {
public:
	GestorDeDocumentos() {};
	virtual ~GestorDeDocumentos(){};

	void buscarTextosEnEntidad(char* consulta, const char* nombreEntidad, std::vector<int>& docsRecuperados);
	void crearListasInvertidas(char* nombreEntidad, std::vector<int> listaDeIds, int block_size);
};

void GestorDeDocumentos::buscarTextosEnEntidad(char* consulta, const char* nombreEntidad,
												std::vector<int>& docsRecuperados)
{
	ListaInvertida lista_invertida(nombreEntidad, 256);
	Vocabulario vocabulario;
	int id, i=0;
	std::vector<String> palabras;
	std::vector<Lista> listas;
	Lista listaAux, listaInterseccion;
	HandlerDeTexto handler;

	handler.leerPalabrasDeString(palabras, consulta);
	for( std::vector<String>::iterator it = palabras.begin(); it!=palabras.end(); it++) {
		id = vocabulario.agregarYDevolverID(*it);
		if( lista_invertida.recuperarLista(id, listaAux) ) {
			listas.push_back(listaAux);
			listaAux.imprimir();
			listaAux.limpiar();
		}
		else
			Impresor::imprimirLinea("Vocablo inexistente.");
	}

	listas[0].interseccion(listas[1], listaAux);
	for( i=2; i<listas.size(); i++){
		listaAux.interseccion(listas[i], listaInterseccion);
		listaAux = listaInterseccion;
	}

	listaAux.copiarDocumentos(docsRecuperados);
}

void GestorDeDocumentos::crearListasInvertidas(char* nombreEntidad, std::vector<int> listaDeIds, int block_size) {
	ListaInvertida lista_invertida(nombreEntidad, 256);

	String path_frec = lista_invertida.crearFrecuenciasFile(listaDeIds);
	SecuentialFile<IDs> frecuencias(block_size);
	frecuencias.open(path_frec);

	String path_listas = lista_invertida.crearListasFile(frecuencias);
}


#endif /* GESTORDECONSULTASDETEXTO_H_ */
